package map;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 3. 无重复字符的最长子串
 */
public class LengthOfLongestSubstring {
    public static int lengthOfLongestSubstring(String s) {
        // 滑动窗口
        int max = 0;
        for (int i = 0; i < s.length(); i++) {
            Set<Character> set = new HashSet<>();
            int j = i;
            while (j < s.length() && set.add(s.charAt(j))) {
                j ++;
            }
            max = Math.max(max, set.size());
        }
        return max;

//        int len = s.length();
//        // 键存储字符，值存储字符在s相应index
//        Map<Character, Integer> map = new HashMap<>();
//        int max = 0;
//        int curLen = 0;
//        for (int i = 0; i < len; i++) {
//            char c = s.charAt(i);
//            if (!map.containsKey(c)) {
//                map.put(c, i);
//                curLen ++;
//            } else {
//                max = Math.max(max, curLen);
//                curLen = 0;
//                int lastIndex = map.get(c);
//                map.clear();
//                for (int j = lastIndex + 1; j <= i; j++) {
//                    map.put(s.charAt(j), j);
//                    curLen ++;
//                }
//            }
//        }
//        max = Math.max(max, curLen);
//        return max;
    }

    public static void main(String[] args) {
        String s = "abcabcbb";
        System.out.println(lengthOfLongestSubstring(s));
    }
}
